package jdbc.basic;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCSelectTest {
	public static void main(String[] args) {
		//1. Driver Loading
		String driverClass = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
		String user = "scott";
		String password = "tiger";
		
		try {
			Class.forName(driverClass);
			System.out.println("드라이버 로딩 성공");
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 로딩 실패");
			e.printStackTrace();
			return;
			// TODO: handle exception
		}
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null;
		ResultSet rset2 = null;
		
		try{
			//2. DataBase 연결
			conn = DriverManager.getConnection(url,user,password);
			System.out.println("데이터베이스와 연결 성공");
			//3. statement 생성
			stmt = conn.createStatement();//이게 뭐하는 거지?? 알아보자. 
			//4. SQL 문 전송 - select
			String sql = "select department_id, department_name, location from department";
			rset = stmt.executeQuery(sql);//이렇게 SQL문을 던지면 executeQuery가 서버 메모리에 있는 resertSet의 결과를 조회할 수 있는 인풋 스트림을 리턴해준다.
			//그 리턴 타입이 위에서 정의한 rset이다.
			
			while(rset.next()){//rset.next가 트루인 동안 반복해라!
				String id = rset.getString(1);//DB는 1부터 시작한다. 유일하게, 그리고 이건 첫번째 컬럼값을 가져오라는 거다. 
				String name = rset.getString(2);//두번째 컬럼
				String loc = rset.getString(3);//세번째 컬럼
				System.out.println(id+"-"+name+"-"+loc);
			}
			System.out.println("-------------------------------**-----------------------------------");
			String sql2 = "select department_id, department_name, location from department where department_id='d-1'";//PK로 조회- 결과 row : 0,1
			//특정 값이 있냐 없냐기 때문에 while을 쓸 필요가 없다.
			rset2 = stmt.executeQuery(sql2);//smtp에서 메소드를 불러오는걸 이해해보자. 글로 정리하자.
			if(rset2.next()){
				String id = rset2.getString("department_id");//getString(1)
				String name = rset2.getString("department_name");
				String loc = rset2.getString("location");
				System.out.println(id+"-"+name+"-"+loc);
			}else{
				System.out.println("조회결과가 없습니다.");
			}
			
			
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			//5.연결닫기, 닫는건 항상 마지막에 사용했던거 부터 거꾸로 닫는다.
			if(rset2 != null)
				try {
					rset2.close();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			
			if(rset != null)
				try {
					rset.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			if(stmt != null)
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			if(conn !=null)
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}


